package lambda;

import java.io.File;
import java.io.FileFilter;

/**
 * lambda可以使得程序员面向函数式编程
 *
 * 使用更简洁的语法创建匿名内部类
 * 但是lambda创建匿名内部类式要求所实现的接口中只能有一个抽象方法
 * 语法：
 * （参数列表）->{
 *     方法体
 * }
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类写法
        FileFilter filter = new FileFilter(){

            @Override
            public boolean accept(File file) {
                System.out.println("正在过滤：" + file.getName());
                return file.getName().startsWith("D");
            }
        };

        //lambda写法
        FileFilter filter1 = (File file)->{
            return file.getName().startsWith("D");
        };

        //参数类型可以忽略不写
        FileFilter filter2 = (file)->{
            return file.getName().startsWith("D");
        };
        //参数类型可以忽略不写，若只有一个参数 圆括号可以不写
        FileFilter filter3 = file->{
            return file.getName().startsWith("D");
        };

        //方法体只有一句话时，可以把{}删了，如果还有return 必须将return也删了
        FileFilter filter4 = file->file.getName().startsWith("D");

        File dir = new File(".");

        File[] subs = dir.listFiles(
                file->file.getName().contains("o")
        );

    }

}
